package com.neusoft.hifly.security;

/**
 * Title: Kernel Library
 * <p>
 * Description: 随即密码生成器
 * <p>
 * Copyright: 2019
 * <p>
 * Company: 东软汉枫
 *
 * @author lh_neu
 * @version 1.0.0
 */
public final class PasswordCreator {
	private static PasswordCreator instance;

	/**
	 * 默认构造函数
	 */
	private PasswordCreator() {
	}

	/**
	 * 获取单例对象
	 *
	 * @return 对象
	 */
	public synchronized static PasswordCreator getInstanse() {
		if (PasswordCreator.instance == null) {
			PasswordCreator.instance = new PasswordCreator();
		}
		return PasswordCreator.instance;
	}

	/**
	 * 根据指定商都生成密码
	 * <p>
	 * 使用ASCII码生成
	 * <p>
	 * 33～126(共95个)是字符，其中：
	 * <p>
	 * 48～57为0到9十个阿拉伯数字，65～90为26个大写英文字母，97～122号为26个小写英文字母，其余为一些标点符号、运算符号
	 *
	 * @author lh_neu
	 * @date 2013-9-3 下午01:57:58
	 * @param len
	 * @return 密码
	 */
	public synchronized String getRandom(final int len) {
		final int start = 48;
		final int end = 122;
		int count = 0; //生成的密码的长度
		final StringBuffer pwd = new StringBuffer("");
		while (count < len) {
			//生成随机数，取绝对值，防止生成负数，
			final int r = (int) (Math.random() * (end - start + 1)) + start;
			if (r < start || r > end) {
				System.out.println(r);
				continue;
			}
			pwd.append((char) r);
			count++;
		}

		return pwd.toString();
	}

	/**
	 * 测试
	 *
	 * @param args
	 *            参数
	 */
	public static void main(final String[] args) {
		for (int i = 0; i < 20; i++) {
			System.out.println(PasswordCreator.getInstanse().getRandom(10));
		}
	}
}
